TECHNION - ISRAEL INSTITUTE OF TECHNOLOGY DEPARTMENT OF COMPUTER SCIENCE הטכניון - מכון טכנולוגי לישראל הפקולטה למדעי המחשב מרצים: רן אל-יניב, נאדר בשותי מבני נתונים 234218-1 מבחן מועד ב' סמסטר חורף תשס"ו מתרגלים: אבי אופשנקו, לורנס בישת, איתן עזריאל, אמיר רובינשטיין שם משפחה: שם פרטי: מס' סטודנט: משך המבחן: שעתיים וחצי. - ברבע השעה האחרונה של המבחן לא נשיב על שאלות. - יש לענות על כל השאלות על טופס המבחן, במקומות המיועדים לכך. - חובה להקפיד על ניסוח וכתב ברורים. תשובות לא קריאות כלל לא תיבדקנה. - שימו לב: 20% מהניקוד של שאלה או סעיף יינתנו אם התשובה היחידה בסעיף זה היא "לא יודע/ת". - מותר להשתמש בכל חומר עזר לא אלקטרוני. - מותר להשתמש במשפטים ותוצאות המופיעים בחומר הרשמי של הקורס (חוברות התרגולים וההרצאות - ללא הסבר נוסף בתנאי שיצוין מפורשות באיזה משפט/תוצאה ופתרונות שפורסמו לתרגילי בית) משתמשים. במבחן זה, סיבוכיות (זמן,זיכרון) מתייחסת תמיד למקרה הגרוע, אלא אם כן נאמר מפורשות אחרת. - במבחן זה מותר להניח כי קריאה לפונקציה לצורך הקצאת זיכרון malloc) למשל) דורשת (1)O זמן, ללא קשר - לכמות הזיכרון שמקצים באמצעותה. 9 עמודים ממוספרים, כולל דף זה. וודאו כי כולם ברשותכם. בטופס זה - ב ה צ ל ח ה! ערך ניקוד בודק שאלה 25 1 25 25 25 100 שאלה 2 שאלה 3 שאלה 4 סה"כ 1
(25 נקודות) שאלה 1 שימו לב: בשאלה זו שלושה חלקים שאינם קשורים זה לזה. חלק 1 תהי U קבוצת המספרים השלמים בין 0 ל- 17: {17,...,0,1,2} = U. עבור m טבעי כלשהו נגדיר משפחת פונקציות ערבול: } m-1,h = {h 0, h 1,...h כאשר לכל, h i : U {0,1,...,m-1} : i ובפרט.h i (x) = (x + i) mod m א. עבור 10=m, האם H קבוצה אוניברסלית? הקיפו בעיגול את התשובה הנכונה והוכיחו בקצרה. כן / לא הוכחה: (הקיפו בעיגול) ב. עבור 13=m, האם H קבוצה אוניברסלית? הקיפו בעיגול את התשובה הנכונה והוכיחו בקצרה. כן / לא הוכחה: (הקיפו בעיגול) 2
חלק 2 א. כמה פעולות השוואה לכל הפחות דרושות למיון ע"י השוואות של מערך בגודל 5 במקרה הגרוע (כלומר עבור הקלטים הגרועים ביותר מבין המערכים בגודל )? 5 ציינו תשובה מספרית והסבירו בקצרה. נדרשות הסבר: פעולות השוואה לפחות. נתון מערך בגודל n של מספרים טבעיים, וידוע ערך החציון שלו. הוכיחו או הפריכו את הטענה הבאה: ישנו אלגוריתם הממיין את המערך בסיבוכיות זמן (n. )O n log log אם לדעתכם הטענה נכונה, הראו אלגוריתם כנדרש. אחרת, הוכיחו שאין כזה. ב. הטענה נכונה / פירוט: אינה נכונה (הקיפו בעיגול). חלק 3. n 2 T ( n ) = 1 n>2 T n T n f n 3 נתונה המשוואה הרקורסיבית הבאה: ) ( + ) ( = ) ( עבור ו- עבור n) T ( n) =Θ(log ("תיטה")? האם ישנה פונקציה (n f ( כך שמתקיים אם כן, הראו פונקציה כזו והוכיחו. אם לא, הוכיחו שלא ייתכן קיומה של פונקציה כזו. f ( n ) = קיימת / לא קיימת פונקציה כזו (הקיפו בעיגול). אם עניתם "קיימת", פונקציה כזו הינה: הוכחה: 3
שאלה (25 2 נקודות) השאלה עוסקת בתיחזוק ובפיצול קבוצות מספרים. ניתן לפתור כל אחד משני הסעיפים ללא תלות בסעיף האחר. סעיף א דרוש מבנה נתונים למימוש הפעולות הבאות: {n,...,1,2}. אתחול מבנה הנתונים, כך שיכיל את הקבוצה Init(n) k הוא המספר המינימלי בה תפוצל לשתי קבוצות חדשות: באחת יהיו i ש- S הקבוצה Split(i,k) המספרים הקטנים ביותר מ- S, ובשנייה יתר איברי S. אם i אינו המספר המינימלי בקבוצתו או אם k אינו קטן ממש מ- S הפעולה נכשלת. Is_Min(i) הפעולה מכריעה האם i הוא מספר מינימלי בקבוצה אליה הוא שייך. Count(i) הפעולה תחזיר את מספר האיברים בקבוצה ש- i הוא המספר המינימלי בה. אם i אינו המספר המינימלי בקבוצתו הפעולה נכשלת. בכל הפעולות מותר להניח כי i הוא שלם, i n 1. הציעו מבנה נתונים התומך בכל הפעולות הנ"ל בזמן (1)O. הסבירו כיצד מתבצעת כל פעולה. תאור מבנה הנתונים והסבר על ביצוע הפעולות: 4
סעיף ב דרוש מבנה נתונים למימוש הפעולות הבאות: {n,...,1,2}. אתחול מבנה הנתונים, כך שיכיל את הקבוצה Init(n) Split(i,k) הקבוצה S ש- i שייך אליה תפוצל לשתי קבוצות חדשות: באחת יהיו k המספרים הקטנים ביותר מ- S, ובשנייה יתר איברי S. אם k אינו קטן ממש מ- S הפעולה נכשלת. i. הפעולה מחזירה את המספר המינימלי בקבוצה אליה משתייך Find_Min(i) Sandwich(a,b) הפעולה מחזירה את מספר הקבוצות במבנה שמוכלות ממש בתחום שבין a ל- b (כולל a ו- b, כלומר קבוצות שכל איבריהן נמצאים בתחום הסגור.([a,b] הניחו ש- a ו- b הם שלמים כלשהם המקיימים.a<b בכל הפעולות מותר להניח כי i הוא שלם, i n 1. הציעו מבנה נתונים התומך ב- Init בסיבוכיות זמן (1)O, ובשלוש הפעולות האחרות בסיבוכיות זמן O(log m) אחת, כאשר m הוא מספר הקבוצות הקיימות במבנה בעת ביצוע הפעולה. הסבירו כיצד מתבצעת כל פעולה. תאור מבנה הנתונים והסבר על ביצוע הפעולות: כל 5
שאלה (25 3 נקודות) הגדרה: תת-מחרוזת x של מחרוזת s מעל א"ב קבוע היא מינימלית-יחידה אם מתקיימים התנאים הבאים: 1. x מופיעה ב- s כתת-מחרוזת פעם אחת בלבד. 2. כל רישא-ממש y של x מופיעה ב- s כתת-מחרוזת יותר מפעם אחת ) y היא רישא-ממש של x אם היא רישא של x השונה מ- x ואינה מחרוזת ריקה). לדוגמא: אם s, = ababa ו- x = bab אז x היא תת-מחרוזת מינימלית-יחידה של s משום שהיא מופיעה ב- s פעם אחת בלבד, ואילו כל רישא-ממש y של x (כלומר y = ba ו- ( y = b מופיעה ב- s פעמיים. יהי T s עץ הסיומות הדחוס של מחרוזת s. א. תנו דוגמא למחרוזת s שהינה מינימלית יחידה ביחס לעצמה. s = ב. בהינתן T s עבור s כלשהי, ומחרוזת נוספת, z ציינו תנאי המתקיים אמ"ם פעם אחת. הסבירו את נכונות התנאי שציינתם. z מופיעה ב- s כתת מחרוזת בדיוק התנאי על T s ו- z: הסבר: 6
x,x s T s ג. תארו אלגוריתם, שבהינתן עבור מחרוזת כלשהי ומחרוזת נוספת האם מכריע היא תת-מחרוזת מינימלית-יחידה של s. ציינו מהי סיבוכיות הזמן של האלגוריתם שתיארתם. O( סיבוכיות הזמן: ) תאור האלגוריתם: ד. תארו אלגוריתם, שבהינתן T s עבור מחרוזת s כלשהי, של s. סיבוכיות זמן נדרשת:.O( s ) מדפיס את מספר תתי-המחרוזות המינימליות-יחידות תאור האלגוריתם: 7
(25 נקודות) שאלה 4 במערכת הבחירות בישראל ישנן n מפלגות, המזוהות ע"י האינדקסים 0 עד 1-n. דרוש מבנה נתונים למימוש הפעולות הבאות: Init(V) אתחול מבנה הנתונים. הפרמטר ל- Init הוא מערך V בגודל n, שבו בתא ה- 0 i (1 n i ( רשום מספר הקולות שקיבלה המפלגה ה- i בבחירות (שימו לב ש- V אינו ממוין). סיבוכיות זמן נדרשת:.O( n).o(log (n סיבוכיות זמן נדרשת: i. קולות למפלגה votes הוספת עוד Add_votes(i, votes) Threshold() מחיקת המפלגות שלא עברו את אחוז החסימה (העומד כיום על 2%) ממבנה הנתונים. כל t כאשר O( t מפלגה שלא קיבלה לפחות 2% מסך הקולות, תימחק מן המבנה. סיבוכיות זמן נדרשת: (n log הוא מספר המפלגות שלא עוברות את אחוז החסימה מבין המפלגות הנמצאות במבנה. Coalition() כידוע, כדי להרכיב קואליציה דרושים לפחות 60 מנדטים. אחת הדרכים להרכיב קואליציה היא ע"י צירוף המפלגות הגדולות בזו אחר זו לפי סדר גודלן (הנמדד במספר הקולות), עד שעוברים ממש את 60 המנדטים. הפעולה תדפיס את האינדקסים של המפלגות החברות בקואליציה כזו, ממוינות לפי גודלן O( c (בסדר יורד). בסיום פעולה זו מבנה הנתונים נותר כפי שהיה לפני ביצועה. סיבוכיות זמן נדרשת: (n log כאשר c הוא מספר המפלגות החברות בקואליציה. הבהרה: מספר המנדטים של מפלגה i בעלת x i קולות (שעברה את אחוז החסימה) יחושב ע"פ x i הנוסחה: 120 כאשר הסכום במכנה הוא על המפלגות שעברו את אחוז החסימה בלבד (לפי חישוב xi זה סכום המנדטים עלול להיות קטן מ- 120. במציאות החישוב יותר מסובך). הנחות: 1) מותר לקרוא ל- Coalition אך ורק מייד לאחר קריאה ל-.Threshold 2) לשם פשטות, הניחו כי בעת ביצוע Coalition אין שתי מפלגות עם מספר מנדטים זהה. תארו מבנה נתונים מתאים. הסבירו כיצד מתבצעת כל פעולה, ומדוע היא עומדת בדרישות הסיבוכיות. תאור מבנה הנתונים: 8
הסבר על ביצוע הפעולות ועמידה בדרישות הסיבוכיות של כל פעולה: 9